package com.kobe.controller;

import com.kobe.common.annotation.Log;
import com.kobe.common.annotation.RepeatSubmit;
import com.kobe.common.core.controller.BaseController;
import com.kobe.common.core.domain.AjaxResult;
import com.kobe.common.core.page.TableDataInfo;
import com.kobe.common.enums.BusinessType;
import com.kobe.common.utils.poi.ExcelUtil;
import com.kobe.domain.SysAssetInfo;
import com.kobe.domain.dto.SysAssetInfoDTO;
import com.kobe.domain.vo.SysAssetInfoVO;
import com.kobe.service.InfoService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpServletResponse;
import java.util.List;

/**
 * 资产信息接口
 */
@RestController
@RequestMapping("/asset/info")
@RequiredArgsConstructor
@Slf4j
public class InfoController extends BaseController {

    private final InfoService infoService;

    /**
     * 获取资产信息列表
     */
    @GetMapping("/list")
    public TableDataInfo<SysAssetInfoVO> list(SysAssetInfoDTO sysAssetInfoDTO) {
        //分页查询你
        startPage();
        log.info("资产信息列表:sysAssetInfoDTO: {}", sysAssetInfoDTO);
        //查询资产信息列表
        List<SysAssetInfoVO> sysAssetInfoVOList = infoService.list(sysAssetInfoDTO);
        return getDataTable(sysAssetInfoVOList);
    }

    /**
     * 根据资产信息ID查询资产信息详细
     */
    @GetMapping("/{infoId}")
    public AjaxResult getInfo(@PathVariable Long infoId) {
        log.info("资产信息详细:infoId: {}", infoId);
        //查询资产信息详细
        SysAssetInfoVO sysAssetInfoVO = infoService.getInfo(infoId);
        return AjaxResult.success(sysAssetInfoVO);
    }

    /**
     * 修改资产信息
     */
    @PutMapping
    @RepeatSubmit
    @Log(title = "资产信息", businessType = BusinessType.UPDATE)
    public AjaxResult update(@RequestBody SysAssetInfo sysAssetInfo) {
        log.info("修改资产信息:sysAssetInfo: {}", sysAssetInfo);
        //修改资产信息
        //校验资产信息是否存在
        SysAssetInfoVO info = infoService.getInfo(sysAssetInfo.getId());
        if (info == null) {
            return AjaxResult.error("资产信息不存在");
        }
        if (sysAssetInfo.getAssetName().equals(info.getAssetName())) {
            return AjaxResult.error("资产名称不能重复");
        }
        return AjaxResult.success(infoService.update(sysAssetInfo));
    }

    /**
     * 添加资产信息
     */
    @PostMapping
    @RepeatSubmit
    @Log(title = "资产信息", businessType = BusinessType.INSERT)
    public AjaxResult add(SysAssetInfo sysAssetInfo) {
        log.info("添加资产信息:sysAssetInfo: {}", sysAssetInfo);
        //添加资产信息
        //校验资产名称是否存在
        SysAssetInfoVO info = infoService.getInfoByAssetName(sysAssetInfo.getAssetName());
        if (info != null) {
            return AjaxResult.error("资产名称已存在");
        }
        return AjaxResult.success(infoService.add(sysAssetInfo));
    }

    /**
     * 删除资产信息
     */
    @Log(title = "资产信息", businessType = BusinessType.DELETE)
    @DeleteMapping("/{ids}")
    @RepeatSubmit
    public AjaxResult delete(@PathVariable Long[] ids) {
        log.info("删除资产信息:ids: {}", ids);
        //删除资产信息
        infoService.deleteBatch(ids);
        return AjaxResult.success();
    }

//    @PostMapping("/export")
//    public void exportUnit(SysAssetInfoDTO dto, HttpServletResponse response) throws Exception {
//
//        // 查询列表 // TODO: 这里有分页,但是没有主动分页,怀疑若依自动分页,待解决
//        List<SysAssetInfo> list = infoService.listV2(dto);
//
//        // 导出.xlsx用这个
//        response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
//        response.setCharacterEncoding("utf-8");
//        // 这里URLEncoder.encode可以防止中文乱码
//        String fileName = URLEncoder.encode("物资信息", "UTF-8");
//        response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xlsx");
//
//        EasyExcel.write(response.getOutputStream(), SysAssetInfo.class).sheet("物资信息列表").doWrite(list);
//    }
    /**
     * 导出资产信息列表
     */
    @PreAuthorize("@ss.hasPermi('system:info:export')")
    @Log(title = "资产信息", businessType = BusinessType.EXPORT)
    @PostMapping("/export")
    public void export(HttpServletResponse response, SysAssetInfo sysAssetInfo)
    {
        List<SysAssetInfo> list = infoService.listV2(sysAssetInfo);
        ExcelUtil<SysAssetInfo> util = new ExcelUtil<>(SysAssetInfo.class);
        util.exportExcel(response, list, "资产信息数据");
    }

}
